<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        function Cat(name, color) {
            this.name = name;
            this.color = color;
        }
        Cat.hello = '你好';
        Cat.isCat = function (arg) {
            if (arg.constructor == Cat) {
                return true;
            }
            return false
        }
        // Cat.prototype.species = "锚";
        Cat.prototype.say = function () {
            console.log(this.name, this.color);
        }
        Cat.prototype.sayHello = function () {
            console.log("hello");
        }
        Object.prototype.hello = "hello";
        var Tom = new Cat("Tom", "black")
        console.log(Cat.isCat(Tom));
        console.log(Tom);
        // console.dir(Cat);

        //Tom的原型链
        //Tom（实例本身）=>Tom.__proto__(Cat.prototype)=>Cat.prototype.__proto__(Object.prototype)=>null
        // prototype.__proto__(Object.prototype)=> null

        //instanceof  判断 Tom的原型链上是否存在  某个构造函数  的原型对象
        // console.log(Tom instanceof Cat);
        // console.log(Tom instanceof Object);

        //判断 某个构造函数的原型对象  是否  存在于   某个实例的原型链上
        // console.log(Cat.prototype.isPrototypeOf(Tom));
        // console.log(Object.prototype.isPrototypeOf(Tom));

        //  判断某个实例化对象上是否存在  某个属性（只找实例本身  不找原型链）
        // console.log(Tom.hasOwnProperty("name"));
        // console.log(Tom.hasOwnProperty("species"));

        //判断某个实例化对象的原型链上  是否存在 莫格属性（既找实例  也找原型链）
        // console.log("name" in Tom);
        // console.log("color" in Tom);
        // console.log("species" in Tom);
        // console.log("hello" in Tom);


        //方法·返回一个布尔值，表示指定的属性是否可枚举（遍历） （只找实例本身）
        // console.log(Tom.propertyIsEnumerable("name"));
    </script>
</body>

</html>